/**
 * 状态管理
 */
import defaultConfig from '../config/config';
const Store = require('electron-store');

// 保存状态的对象
const state = {};

// Store 实例
const storeInstance = new Store();

// 读取历史记录
state.filesHistory = storeInstance.get('filesHistory', []);

// 读取自定义配置
state.customConfig = storeInstance.get('customConfig', {});

let State = {

  /**
   * 添加历史记录
   * @param fileInfo
   * {
   *   fileName: 'string',
   *   filePath: 'string'
   * }
   */
  addHistory(fileInfo) {
    // 先删除历史记录中该文件的记录
    $$.each(state.filesHistory, (i, f) => {
      if (f.filePath === fileInfo.filePath) {
        state.filesHistory.splice(i, 1);
      }
    });

    // 添加到历史记录中
    state.filesHistory.unshift(fileInfo);

    // 最多记录的历史记录数量
    state.filesHistory.splice(State.getConfig('historyCount'));
  },

  /**
   * 获取历史记录
   */
  getHistory() {
    return state.filesHistory;
  },

  /**
   * 清空历史记录
   */
  clearHistory() {
    state.filesHistory = [];
  },

  /**
   * 设置配置
   * @param key
   * @param value
   */
  setConfig(key, value) {
    state.customConfig[key] = value;
  },

  /**
   * 读取配置，自定义配置不存在，则返回默认配置
   * @param key
   */
  getConfig(key) {
    let value = this.getCustomConfig(key);

    return typeof value === 'undefined' ? defaultConfig[key] : value;
  },

  /**
   * 读取自定义配置
   * @param key
   * @returns {*}
   */
  getCustomConfig(key) {
    return state.customConfig[key];
  },

  /**
   * 移除配置
   * @param key
   */
  removeConfig(key) {
    delete state.customConfig[key];
  },

  /**
   * 清空配置
   */
  clearConfig() {
    state.customConfig = {};
  },

  /**
   * 保存所有状态
   */
  save() {
    $$.each(state, (key, value) => {
      storeInstance.set(key, value);
    });
  }
};

export default State;